package com.ssm.collection.core.common.service;

import java.util.List;

import org.springframework.stereotype.Service;

import tk.mybatis.mapper.entity.Condition;

/**
 * 通用接口,该接口下的方法可直接调用
 */
@Service
public interface BaseService<E, PK> {

	// save add create insert
	// update merge put
	// del remove
	// get count find list

	/**
	 * 新增
	 * 
	 * @param entity
	 * @return
	 */
	// boolean insert(E entity);

	/**
	 * 删除
	 * 
	 * @param
	 * @return
	 */
	boolean delete(PK key);

	/**
	 * 逻辑删除
	 * 
	 * @param
	 * @return
	 */
	boolean deleteFlag(Long id, Long operator_id);

	/**
	 * 根据主键查询
	 * 
	 * @param
	 * @return
	 */
	E getPk(PK key);
	
	/**
	 * 根据实体查询
	 * 
	 * @param
	 * @return
	 */
	E selectOne(E entity);

	/**
	 * 部分保存
	 * 
	 * @param entity
	 * @return
	 */
	boolean insert(E entity);

	/**
	 * 根据对应列获取全部实体信息，排序
	 * 
	 * @param orderBy
	 *            排序字段
	 * @return
	 */
	List<E> selectAll(String orderBy);

	/**
	 * 获取全部实体信息
	 * 
	 * @return
	 */
	List<E> selectAll();

	/**
	 * 查询数据
	 * 
	 * @param entity
	 * @return
	 */
	E queryForObject(E entity);

	/**
	 * 查询数据
	 * 
	 * @param condition
	 * @return
	 */
	E queryForObjectByCondition(Condition condition);

	/**
	 * 返回实体
	 * 
	 * @param entity
	 * @return
	 */
	List<E> queryForList(E entity);

	/**
	 * 根据属性查找
	 * 
	 * @param property
	 * @param value
	 * @return
	 */
	E queryByProperty(String property, Object value);

	/**
	 * 根据入参参数类型获取到复合条件的所有实体信息list集合
	 * 
	 * @param condition
	 * @param page
	 * @param rows
	 * @return
	 */
	List<E> queryForListByCondition(Condition condition);

	/**
	 * 更新实体全部字段，空值设null
	 * 
	 * @param entity
	 * @throws Exception
	 */
	// boolean updateAll(E entity);

	/**
	 * 更新部分实体
	 * 
	 * @param entity
	 * @return
	 */
	boolean update(E entity);

}
